package com.itheima.dao;

import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

/**
 * Created by Mr.King on 2017/2/26.
 */
public class BaseDao<T> extends HibernateDaoSupport {

    private Class clazzp;

    public BaseDao() {
        /**得到实际类型参数

         1.得到customerDao对象的class
         得到当前运行对象class
         */
        Class clazz = this.getClass();

        /**
         * 2.得到customer的父类的参数话类型
         */
        Type type = clazz.getGenericSuperclass();
        ParameterizedType ptype = (ParameterizedType) type;

        /**
         * 3.得到实际类参数
         */
        Type[] types = ptype.getActualTypeArguments();
        //得到数数组里面的第一个值
        this.clazzp = (Class) types[0];
    }

    //添加
    public void saveAdd(T t){
        this.getHibernateTemplate().save(t);
    }

    //删除
    public void delete(T t){
        this.getHibernateTemplate().delete(t);
    }

    //修改
    public void saveEdit(T t){
        this.getHibernateTemplate().update(t);
    }

    //查寻所有
    public List<T> list(){
        return  (List<T>) this.getHibernateTemplate().find("from " + clazzp.getSimpleName());
    }

    //根据id查询
    public T findOne(int id){
        return (T) this.getHibernateTemplate().get(clazzp,id);
    }
}
